﻿package test;

/**
 * 对象初始化过程二
 * */
public class Base2 {
	@SuppressWarnings("unused")
	public static void main(String... args) {
		// 输出x=0;
		// 原因是子类覆盖了父类的方法getValue();
		// 因此在父类构造方法中调用的getValue()是子类中的方法;
		Bar bar = new Bar();
	}
}

class Foo {
	int i;

	Foo() {
		i = 1;
		int x = getValue();
		System.out.println("x=" + x);
	}

	protected int getValue() {
		return i;
	}
}

class Bar extends Foo {
	int j;

	Bar() {
		j = 2;
	}
	//覆盖父类方法
	@Override
	protected int getValue() {
		return j;
	}
}
